﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using INSTA.GestionEcole.DAL;

namespace INSTA.EcoleGestion.FORMS
{
    public partial class Inscription : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            
            if (!IsPostBack)
            {
                Label1.Visible = false;
                using (var context = new GestionInstaEntities())
                {
                    var query = from p in context.Promo
                                select p;
                    List<string> final = new List<string>();
                    foreach (var prom in query)
                    {
                       

                            if (!final.Contains(prom.numéroPromo))
                            {
                                final.Add(prom.numéroPromo);
                            }
                        }
                     string[] tabPromo = (string[])final.ToArray();
                        for (int i = 0; i < tabPromo.Length; i++)
                        {
                            DropDownListPromotion.Items.Add(tabPromo[i]);
                        }
                    
                      

                    
                }
                DropDownList1.Items.Add(" ");
                DropDownList1.Items.Add("Professeur");
                DropDownList1.Items.Add("Etudiant");
                aa.Items.Add("");
                for (int i = 1940; i < 2015; i++)
                {
                    aa.Items.Add("" + i);
                }
                mm.Items.Add("");
                mm.Items.Add("Janvier");
                mm.Items.Add("Février");
                mm.Items.Add("Mars");
                mm.Items.Add("Avril");
                mm.Items.Add("Mai");
                mm.Items.Add("Juin");
                mm.Items.Add("Juillet");
                mm.Items.Add("Aout");
                mm.Items.Add("Septembre");
                mm.Items.Add("Octobre");
                mm.Items.Add("Novembre");
                mm.Items.Add("Décembre");
                jj.Items.Add("");
                for (int i = 1; i < 10; i++)
                {
                    jj.Items.Add("0" + i);
                }
                for (int i = 10; i < 32; i++)
                {
                    jj.Items.Add("" + i);
                }
            }

        }




        private bool validMail(string email)
        {
            System.Text.RegularExpressions.Regex validEmailReg = new Regex(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4})$");
            //([\w]+) ==> caractère alphanumérique apparaissant une fois ou plus 
            return validEmailReg.IsMatch(email); // retourne true ou false selon la vérification
        }

        private bool validTel(string tel)
        {
            System.Text.RegularExpressions.Regex validTelReg = new Regex(@"^[0]\d-\d{2}-\d{2}-\d{2}-\d{2}");
            //([\w]+) ==> caractère alphanumérique apparaissant une fois ou plus 
            return validTelReg.IsMatch(tel); // retourne true ou false selon la vérification
        }

        protected void ButtonInscription(object sender, EventArgs e)
        {
            //var validTel = @"^[0]\d-\d{2}-\d{2}-\d{2}-\d{2}";
            //var validEmail = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4})$";
        
                using (var context = new GestionInstaEntities())
                {

                   

                    if (DropDownList1.SelectedItem.Text == "Etudiant")
                    {
                        Etudiant etu = new Etudiant();
                        etu.Nom = TextBoxNom.Text;
                        etu.Prenom = TextBoxPrenom.Text;
                        etu.Password = TextBoxPassword.Text;
                        etu.Tel = TextBoxTel.Text;
                        etu.DateDeNaissance = jj.SelectedItem.Text + "/" + mm.SelectedItem.Text + "/" +
                                              aa.SelectedItem.Text;
                        etu.Adresse = TextBoxAdresse.Text;
                        etu.Promo = DropDownListPromotion.SelectedItem.Text;
                        etu.email = TextBoxEmail.Text;

                        //On recherche dans la base de donné étudiant si l'étudiant existe
                        //Si le resultat de la requete est égal a 0 l'étudiant qui s'inscrit
                        // est nouveau dans l'école sinon c'est que l'étudiant est déja inscrit dans l'établissement.
                        //On vérifie aussi qu'il a bien remplie tout le formulaire.

                        int query = (from p in context.Etudiant
                                     where (p.Nom == etu.Nom) & (p.Prenom == etu.Prenom)
                                           & (p.Tel == etu.Tel)
                                           & (p.Adresse == etu.Adresse) & (p.Promo == etu.Promo)
                                           & (p.email == etu.email)
                                     select p).Count();
                        int queryEmail= (from p in context.Etudiant
                                     where p.email == etu.email
                                     select p).Count();

                        if (query == 0 & TextBoxNom.Text != null & TextBoxPrenom.Text != null &
                            TextBoxPassword.Text != null & DropDownListPromotion.SelectedItem.Text != null & DropDownListPromotion.SelectedItem.Text != "" 
                            &TextBoxTel.Text != null & etu.email != null & etu.Adresse != null & 
                            jj.SelectedItem.Text!=null & jj.SelectedItem.Text!="" & mm.SelectedItem.Text !=null & mm.SelectedItem.Text !=""
                                & aa.SelectedItem.Text != null & aa.SelectedItem.Text !="" & queryEmail == 0 
                                & validMail(TextBoxEmail.Text) & validTel(TextBoxTel.Text))
                        {

                            //CAS ou la personne est la 1ere inscrite dans l'année <==> query1==0 .
                            //Dans ce cas on lui donne le premier ID de l'année soit 201300
                            int query1 = (from p in context.Etudiant
                                          select p).Count();

                            if (query1 == 0)
                            {
                                etu.ID = 201300;
                                context.Etudiant.Add(etu);
                                context.SaveChanges();
                            }

                                //L'Id est unique a chaque etudiant onl'incrémente de 1 a chaque fois 
                                //on récupere donc l'ID du derniere étudiant inscrit 
                                // c'est a dire l'étudiant avec l'ID le plus grand puis on incrémente de 1
                                // pour avoir l'Id du nouveau étudiant inscrit.

                            else
                            {
                                int query2 = (from p in context.Etudiant
                                              select p.ID).Max();




                                int IDNewEtudiant = query2 + 1;
                                etu.ID = IDNewEtudiant;
                                context.Etudiant.Add(etu);
                                context.SaveChanges();

                            }
                        }

                        if (query > 0)
                        {
                            //Session["ErreurInscription"] = "L'étudiant est déja inscrit  vous ne pouvez pas le réeinscrire";
                            //Response.Redirect("~/InscriptionImpossible.aspx");

                            Label1.Text = "L'étudiant est déja inscrit  vous ne pouvez pas le réeinscrire";
                            Label1.ForeColor = Color.DarkRed;
                            Label1.Visible = true;
                        }
                        else
                        {
                            Label1.Visible = false;
                        }


                    }
                    else if (DropDownList1.SelectedItem.Text == "Professeur")
                    {

                        Professeur prof = new Professeur();
                        prof.Nom = TextBoxNom.Text;
                        prof.Prenom = TextBoxPrenom.Text;
                        prof.Password = TextBoxPassword.Text;
                        prof.Tel = TextBoxTel.Text;
                        prof.Adresse = TextBoxAdresse.Text;
                        prof.Promo = DropDownListPromotion.SelectedItem.Text;
                        prof.Email = TextBoxEmail.Text;

                        //On recherche dans la base de donné étudiant si l'étudiant existe
                        //Si le resultat de la requete est égal a 0 l'étudiant qui s'inscrit
                        // est nouveau dans l'école sinon c'est que l'étudiant est déja inscrit dans l'établissement.
                        //On vérifie aussi qu'il a bien remplie tout le formulaire.

                        int query = (from p in context.Professeur
                            where (p.Nom == prof.Nom) & (p.Prenom == prof.Prenom)
                                  & (p.Password == prof.Password) & (p.Tel == prof.Tel)
                                  & (p.Adresse == prof.Adresse) & (p.Promo == prof.Promo)
                                  & (p.Email == prof.Email)
                            select p).Count();

                        int queryEmail = (from p in context.Professeur
                                          where p.Email == prof.Email
                                          select p).Count();

                        if (query == 0 & TextBoxNom.Text != null & TextBoxPrenom.Text != null &
                            TextBoxPassword.Text != null & DropDownListPromotion.SelectedItem.Text != null & DropDownListPromotion.SelectedItem.Text != "" 
                            &TextBoxTel.Text != null & prof.Email != null & prof.Adresse != null & 
                            jj.SelectedItem.Text!=null & jj.SelectedItem.Text!="" & mm.SelectedItem.Text !=null & mm.SelectedItem.Text !=""
                                & aa.SelectedItem.Text != null & aa.SelectedItem.Text !="" & queryEmail == 0 
                                & validMail(TextBoxEmail.Text) & validTel(TextBoxTel.Text)){

                            //CAS ou le professeur est le 1ere inscrit dans l'année <==> query1==0 .
                            //Dans ce cas on lui donne le premier ID de l'année soit 201300
                            int query1 = (from p in context.Professeur
                                select p).Count();

                            if (query1 == 0)
                            {
                                prof.ID = 1300;
                                context.Professeur.Add(prof);
                                context.SaveChanges();
                            }

                                //L'Id est unique a chaque professeur onl'incrémente de 1 a chaque inscription 
                                //on récupere donc l'ID du derniere étudiant inscrit 
                                // c'est a dire l'étudiant avec l'ID le plus grand puis on incrémente de 1
                                // pour avoir l'Id du nouveau étudiant inscrit.

                            else
                            {
                                int query2 = (from p in context.Professeur
                                    select p.ID).Max();




                                int IDNewProf = query2 + 1;
                                prof.ID = IDNewProf;
                                context.Professeur.Add(prof);
                                context.SaveChanges();

                            }
                        }

                        if (query > 0)
                        {
                            //Session["ErreurInscription"] = "L'étudiant est déja inscrit  vous ne pouvez pas le réeinscrire";
                            //Response.Redirect("~/InscriptionImpossible.aspx");

                            Label1.Text = "Le Professeur est déja inscrit  vous ne pouvez pas le réeinscrire";
                            Label1.ForeColor = Color.DarkRed;
                            Label1.Visible = true;
                        }
                        else
                        {
                            Label1.Visible = false;
                        }
                    }
                   

                }


           
        }
    }
}

